home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / mac / proj_b2.hqx / Project Mac - B2 / Satellit < prev    next >
Text File  |  1987-11-30  |  24KB  |  687 lines

  1. 10 '                     Compiler Version
  2. 20 '
  3. 30 ' Change About Box with ResEdit
  4. '              ++++++++++++++++++++++++++++++++++++++++++++++++
  5. '             +++ Berechnung von elliptischen Umlaufbahnen +++
  6. '              +++   (DJ 1 VA)                    (DB2OS)   +++
  7. '            +++           Sun Nov 29, 1987 18:12:54      +++
  8. '              +++                  V 1.5                   +++
  9. '              +++    Macintosh Modifikation von DJ 1 VA    +++
  10. '              ++++++++++++++++++++++++++++++++++++++++++++++++
  11. 40  LIBRARY "Satellit"
  12. 50 '  LIBRARY  for Compiler Version in RS Fork
  13. 60 '                                   INITIALISIERUNG          
  14. 70 '                                  ================
  15. 80 '
  16. 90 '  CLR Toolbox required for Interpreter Version
  17. 100 CLEAR : CLS : RESTORE
  18. 103 ON ERROR GOTO 12000
  19. 104 Version$ = "1.5 D1"
  20.         ref% = 0
  21. 106 OpenResFile "Satellit",ref%
  22.        DIM Cursor% (33)
  23.        LoadCursor ref%,5,Cursor%(0)
  24.        CALL SETCURSOR (VARPTR(Cursor%(0)))
  25. 105 DEFSNG X-Y
  26. 120 DEF FNELL(X) = SQR(B^2*(1-(X^2/A^2)))
  27. 130 CALL TEXTFONT (1) : CALL TEXTSIZE (12): CALL TEXTFACE(1)
  28. 140 ULINE$ = "--------------------------------------------"
  29. 150 WINDOW 1,"Satellit"
  30. 160 CLS
  31. 170 LOCATE 4,6 : STR5$="E L L I P T I C A L  T R A C K I N G  P R O G R A M"
  32.  DrawText STR5$
  33. 180 LOCATE 8,16 : STR5$="By DF1OH and DB2OS"
  34.  DrawText STR5$
  35. 190 LOCATE 10,13 : STR5$="Macintosh Version by DJ1VA"
  36.  DrawText STR5$
  37. 200 CALL TEXTSIZE (10)
  38. 210 LOCATE 14,21 : PRINT"Version  "Version$
  39. 220 CALL TEXTSIZE (12)
  40. 230 LOCATE 18,16 : PRINT "<Mode>  to continue.";
  41. 300 GOSUB MenuInit
  42. 400 ' 
  43. 550 '           *** M A I N  P R O G R A M ***
  44. 555 '          ==================================
  45. 560 ON MENU GOSUB HandleMenu : MENU ON
  46.     Idle: GOTO Idle 
  47. 568 IF Key% = 5 THEN GOTO Kepler
  48. 570 '  $IGNORE ON
  49. 571 IF Key% = 8 THEN CLS: MENU RESET : END
  50. 572 IF Key% = 7 THEN CLS: MENU RESET : SYSTEM
  51. 575 '  $IGNORE OFF
  52. 580 IF Key%  = 7 THEN CLS: MENU RESET  : END
  53. 585 CALL TEXTSIZE (12) : CALL TEXTFACE (0)
  54. 590 DEFDBL A-W
  55. 600 DEFDBL Z
  56. 610 PI=3.14159265#:PI180=PI/180:PI081=180/PI:PI05=PI/2:PI2=2*PI
  57. 620 DEF FNASN (X)=ATN(X/SQR(1D-38-(ABS(X)<1)*(1-X*X)))
  58. 630 RE=6378
  59. 640 CLS : PRINT : PRINT "Station Location: " : PRINT
  60. 650 STATION.LON=-11.2
  61. 660 STATION.LAT=48.5
  62. 670 PRINT "Longitude             ";
  63. 675 PRINT  USING "###.##"; STATION.LON;
  64. 677 PRINT " Degrees"
  65. 680 PRINT "Latitude               ";
  66. 685 PRINT USING "###.##"; STATION.LAT; 
  67. 687 PRINT " Degrees"
  68. 690 PRINT:PRINT ULINE$
  69. 700 GOSUB NewLocation
  70. 710 ' 
  71. 720 IF (Key$ = "Y" OR Key$ =  "y" )THEN 730 ELSE 750
  72. 730 INPUT"                              New Longitude :  ",STATION.LON
  73. 740 INPUT"                              New Latitude  :  ",STATION.LAT
  74. 750 STATION.LON=STATION.LON*PI180
  75. 760 STATION.LAT=STATION.LAT*PI180
  76. 770 SIN.STATION.LAT=SIN(STATION.LAT)
  77. 780 COS.STATION.LAT=COS(STATION.LAT)
  78. 790 ' 
  79. 800 '             ***  SATELLITEN-DATEN  ***
  80. 805 '          ===============================
  81. 810 file$=FILES$(1,"PARA")
  82. 820 CLS
  83. 840 OPEN"I",#1,file$
  84. 850 INPUT#1,NA$,DATUM$,EPOCH.TIME,EPOCH.REV,INCLINATION,RA.OF.NODE,ECCENTRICITY,ARG.OF.PERIGEE,MEAN.ANOMALY,MEAN.MOTION,DECAY.RATE
  85. 860 INCLINATION=INCLINATION*PI180
  86. 870 SIN.INCLINATION=SIN(INCLINATION)
  87. 880 COS.INCLINATION=COS(INCLINATION)
  88. 890 GOSUB 6500 : T0=X : '  DATE STRING
  89. 900 CLOSE #1: CALL SETCURSOR (VARPTR(Cursor%(0)))
  90. 901 IF RIGHT$(file$,4)=".PAR" THEN file$= LEFT$(file$,(LEN(file$)-4))
  91. 905 WINDOW 1,NA$
  92. 910 PRINT"Current date (dd.mm.yy):  ";
  93. 915 GOSUB EnterDate
  94. 918 PRINT DATUM$
  95. 920 PRINT ULINE$
  96. 930 PRINT"Time (UTC)  (hhmm):        ";
  97. 925 GOSUB EnterTime
  98. 938 PRINT U$
  99. 940 PRINT ULINE$
  100. 950 UH=VAL(LEFT$(U$,2)) : UM=VAL(RIGHT$(U$,2))
  101. 960 IF Key%=1 THEN 990
  102. 970 PRINT "Steprate (min) :             ";
  103. 975 GOSUB EnterSteprate
  104. 980 PRINT I% : PRINT ULINE$
  105. 990 CALL TEXTSIZE (9)
  106.  IF Key% = 1 OR Key% = 2 THEN
  107.         GOTO CalcStep
  108.  ELSEIF Key% = 3 THEN
  109.      GOTO DiskData
  110.  ELSEIF Key% = 4 THEN
  111.      GOTO AzEl
  112.  ELSE 
  113.      GOTO 568
  114.  END IF
  115.  
  116. AzEl:
  117. 1010 '           *** MASK FOR AZ - EL PROJECTION  ***
  118. 1020 '         =======================================
  119. 1030 CLS : PRINT "- [60]"
  120. 1060 LINE (7,5) - (7,273)
  121. 1070 LOCATE 23,2
  122. 1080 LINE (7,273) - (475,273)
  123. 1105 GOSUB Scale
  124. 1106 PRINT
  125. 1110 PRINT"[0]"; TAB (19); "[90]";TAB (38) ; "[180]"; TAB (58); "[270]"; TAB(77); "[360]";
  126. 1115 PRINT TAB(7);"TIME:";TAB(20);"UTC";TAB(28);"AZ=";TAB(36);"Deg.";TAB(45);"EL=";TAB(52);"Deg.";TAB(58);"DX=" ;TAB(68);"Km";
  127. 1120 LOCATE 1,7 :PRINT NA$
  128. 1130 LOCATE 1,16 :PRINT"on";
  129. 1135 LOCATE 2, 7  :PRINT"Orbit #:"
  130. 1140 LOCATE 3, 7 :PRINT"Steprate:" I%" min"
  131. 1150 LOCATE 1,71 : PRINT "[Degrees]";
  132. 1160 GOTO 1750
  133.  
  134. CalcStep:
  135. 1180 '         *** MASK FOR REALTIME AND STEP  ***
  136. 1190 '         ====================================
  137. 1200 CALL TEXTSIZE (9)
  138. 1205 CLS : PRINT"     Any Key to interrupt."
  139. 1208 PRINT"_______________________________________________"
  140. 1210 PRINT TAB(5);NA$;TAB(15);"on"                                               
  141. 1220 PRINT TAB(10);"Orbit #"
  142. 1230 PRINT TAB(5);"at";TAB(18);"UTC"
  143. 1240 PRINT:PRINT
  144. 1250 PRINT TAB(5);"Azimuth";TAB(22);"degrees"
  145. 1260 PRINT TAB(5);"Elevation";TAB(22);"degrees"
  146. 1270 PRINT TAB(5);"Distance";TAB(27);"Km"
  147. 1280 PRINT:PRINT
  148. 1290 PRINT TAB(5);"2m   - shift";TAB(31);"Hz"
  149. 1300 PRINT TAB(5);"70cm - shift";TAB(31);"Hz"
  150. 1310 PRINT TAB(5);"23cm - shift";TAB(31);"Hz"
  151. 1320 PRINT TAB(5);"Time delay   (2way)";TAB(42);"ms"
  152. 1330 PRINT
  153. 1340 PRINT TAB(5);"Satellite's  Longitude";TAB(42);"degrees"
  154. 1350 PRINT TAB(5);"Satellite's  Latitude ";TAB(42);"degrees"
  155. 1360 PRINT TAB(5);"MA                     (Apogee=128, Perigee=255)"
  156. 1370 XCOORD=53
  157. 1380 LOCATE 1,XCOORD : PRINT TAB(56)"DX STATE INFORMATION"
  158. 1390 LOCATE 2,XCOORD : PRINT TAB(53)"_________________ AZ _ EL _"
  159. 1400 FOR YCOORD = 3 TO 19 STEP 1
  160. 1410 READ STATE$,STATE.LAT,STATE.LON
  161. 1420 LOCATE YCOORD,53  : DrawText STATE$ : '  print STATE$
  162. 1430 NEXT YCOORD
  163. 1440 RESTORE 3366
  164. 1450 GOTO 1750
  165. '
  166. DiskData:
  167. 1460 '   ----------------------------------------------------
  168. 1470 '             *** MASK FOR DATA TO DISK ***
  169. 1475 '             ==============================
  170. 1480  CALL TEXTSIZE(12)
  171. 1483 PRINT "Time of end UTC (hhmm): ";
  172. 1485 GOSUB TimeOfEnd
  173. 1488 PRINT UTCEND$ : PRINT ULINE$
  174. 1490 UHEND=VAL(LEFT$(UTCEND$,2)) : UMEND=VAL(RIGHT$(UTCEND$,2))
  175. 1500 PRINT"How many days?            ";
  176. 1505 GOSUB NbrOfDays
  177. 1508 PRINT DAYS:PRINT ULINE$
  178. 1510 IF DAYS < 1 THEN DAYS = 1
  179. 1520 OPEN"O",#1,file$+".ELL"
  180. 1530 CLS
  181. 1540 PRINT
  182. 1550 PRINT
  183. 1560 PRINT"        CALCULATION OF THE SATELLITE ";NA$
  184. 1570 PRINT"        =================================="
  185. 1580 PRINT:PRINT
  186. 1590 PRINT"Station Longitude     ";STATION.LON*PI081;"  degrees"
  187. 1600 PRINT"Station Latitude      ";STATION.LAT*PI081;"  degrees"
  188. 1610 PRINT
  189. 1620 PRINT"The Satellite ";NA$;" will be computed for ";DAYS; "DAY(S)."
  190. 1630 PRINT:PRINT
  191. 1640 '   *** TO DISK   *
  192. 1650 PRINT#1,
  193. 1660 PRINT#1,
  194. 1670 PRINT#1,"       CALCULATION OF THE SATELLITE ";NA$
  195. 1680 PRINT#1,"       ====================================="
  196. 1690 PRINT#1,:PRINT#1,
  197. 1700 PRINT#1,"Station longitude   ";STATION.LON*PI081;"   degrees"
  198. 1710 PRINT#1,"Station  latitude   ";STATION.LAT*PI081;"   degrees"
  199. 1720 PRINT#1,
  200. 1730 PRINT#1," The Satellite "; NA$;" will be computed for ";DAYS;"DAY(S)."
  201. 1740 PRINT#1, : PRINT#1,
  202. 1750 KZ=-1
  203. 1760 GOSUB 6500 : '  DATE STRING
  204. 1770 GOSUB 8000 : '  LONG TIME CORRECTION
  205. 1780 ' 
  206. 1790 GOSUB 5000 : '  TIME STRING
  207. 1799 ' 
  208. 1800 '             *** SUBSATEL. - POSITION  ***
  209. 1805 '             =============================
  210. 1810 PE=ARG.OF.PERIGEE*PI180+DB*(DT+Z)
  211. 1820 EQ = RA.OF.NODE*PI180+PB*(DT+Z)
  212. 1830 M=MEAN.ANOMALY/360+DT*(MEAN.MOTION+ME)/2
  213. 1840 K1=Z*ME
  214. 1850 NR=INT(CSNG(M+K1))
  215. 1860 K2=M-INT(CSNG(M))
  216. 1870 M=K1+K2
  217. 1880 M=(M-INT(CSNG(M)))*PI2
  218. 1890 MA=INT(CSNG(M*255/PI2+.5))
  219. 1895 ' 
  220. 1900 '             ***       KEPLER-EQUATION     ****
  221. 1910 '             ==================================
  222. 1920 EW=M+ECCENTRICITY*SIN(M)*(1+ECCENTRICITY*COS(M))
  223. 1930 K1=(M-EW+ECCENTRICITY * SIN(EW))/(1-ECCENTRICITY * COS(EW))
  224. 1940 IF ABS(K1) < .000000001#      THEN 1970
  225. 1950 EW=EW+K1
  226. 1960 GOTO 1930
  227. 1970 V=PI05-FNASN((ECCENTRICITY-COS(EW))/(ECCENTRICITY*COS(EW)-1))
  228. 1980 IF M>PI THEN V=PI2-V
  229. 1990 D1=FNASN(SIN(PE+V)*SIN.INCLINATION)
  230. 2000 A1=PI2+ATN(TAN(PE+V)*COS.INCLINATION)+EQ+PI*(COS(PE+V)<0)
  231. 2010 R=A*(1-ECCENTRICITY*COS(EW))
  232. 2020 SZ = 1.73993 + .0172027912# * X
  233. 2030 SZ=SZ-INT(CSNG(SZ/PI2))*PI2+6.30038867#*Z
  234. 2040 SAT.LON=SZ-A1
  235. 2050 SAT.LAT=D1+.003345*RE/R*SIN(2*D1)
  236. 2060 LON=INT(CSNG(SAT.LON*PI081+.5))MOD 360
  237. 2070 IF LON<-180 THEN LON=LON+360
  238. 2080 LAT=INT(CSNG(SAT.LAT*PI081+.5))
  239. 2090 SIN.SAT.LAT=SIN(SAT.LAT)
  240. 2100 COS.SAT.LAT=COS(SAT.LAT)
  241. 2110 '
  242. 2120 '             ***  AZ/EL/DX/SHIFT  ***
  243. 2115 '             ========================
  244. 2130 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATION.LAT+COS.SAT.LAT*COS.STATION.LAT*COS(SAT.LON-STATION.LON))
  245. 2140 EL=ATN((COS(K1)-RE/R)/SIN(K1))
  246. 2150 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATION.LAT*COS(K1))/COS.STATION.LAT/SIN(K1))
  247. 2160 IF SIN(SAT.LON-STATION.LON)>=0 THEN AZ=PI2-AZ
  248. 2170 DX=R*SIN(K1)/COS(EL)
  249. 2180 K1=(KD-DX)/(SZ-KZ-PI2*(KZ>SZ))*.000000000243239# : KD=DX : KZ=SZ
  250. 2190 S2=INT(CSNG(K1*146000000#+.5))
  251. 2200 S7=INT(CSNG(K1*436000000#+.5))
  252. 2210 S3=INT(CSNG(K1*1268000000#+.5))
  253. 2212 CoordX = 463/360 * (PI081*AZ)+ 7
  254. 2215 CoordY = 268 -  (268/60 * (PI081*EL) )+ 5
  255. 2220 EL=INT(CSNG(PI081*EL+.5))
  256. 2230 AZ=INT(CSNG(PI081*AZ+.5))
  257. 2240 DX=INT(CSNG(DX+.5))
  258. 2250 '
  259. 2260 '                ***  PRINT IN FORM  ***
  260. 2270 '              ***  INTERRUPT-ROUTINE  ***
  261. 2280 '             =============================
  262. 2290 IF INKEY$="" THEN 2360
  263. 2300 LOCATE 1,1  : PRINT"                            ";
  264. 2310 LOCATE 1,1 : PRINT"    Interrupted.   Space to Continue,  Any Key to Stop.    ";
  265. 2320 INTERRUPT$=INKEY$
  266. 2330 IF INTERRUPT$="" THEN 2320
  267. 2340 LOCATE 1,1 : PRINT"                                                    Any Key to Interrupt. ";
  268. 2350 IF INTERRUPT$ <> " " THEN CLS : RESET : RESTORE 3366: OLDDAY=0 : GOTO 70
  269. 2360 ON Key% GOTO 3020,3020,3390,3610
  270. 2365 ' 
  271. 3000 '               ***  REAL AND STEP  ***
  272. 3010 '             ========================
  273. 3020 LOCATE 3,18  : PRINT RIGHT$("   "+ DATUM$,10)
  274. 3030 LOCATE 4,18  : PRINT NR+EPOCH.REV
  275. 3040 LOCATE 5,8 : PRINT U$;
  276. 3050 LOCATE 8,15  : PRINT "   ";
  277. 3055 LOCATE 8,15  : PRINT AZ;
  278. 3060 LOCATE 9,15  : PRINT EL;
  279. 3070 LOCATE 10,19  : PRINT DX;
  280. 3080 LOCATE 13,21  : PRINT S2;
  281. 3090 LOCATE 14,21  : PRINT S7;
  282. 3100 LOCATE 15,21  : PRINT S3;
  283. 3110 LOCATE 16,30  : PRINT INT(CSNG(2*DX/299290!)*1000 +.5);
  284. 3120 LOCATE 18,34  : PRINT LON;
  285. 3130 LOCATE 19,34  : PRINT LAT;
  286. 3140 LOCATE 20,10  : PRINT MA;"   "
  287. 3150 ' 
  288. 3160 '               *** AZ/EL FOR DX STATE INFORMATION  ***
  289. 3165 '                  ==========================================
  290. 3170 FOR YCOORD=3 TO 19 STEP 1
  291. 3180 READ STATE$,STATE.LAT,STATE.LON
  292. 3190 STATE.LAT=STATE.LAT*PI180
  293. 3200 SIN.STATE.LAT=SIN(STATE.LAT)
  294. 3210 COS.STATE.LAT=COS(STATE.LAT)
  295. 3220 STATE.LON=STATE.LON*PI180
  296. 3230 K1=PI05-FNASN(SIN.SAT.LAT*SIN.STATE.LAT+COS.SAT.LAT*COS.STATE.LAT*COS(SAT.LON-STATE.LON))
  297. 3240 EL=ATN((COS(K1)-RE/R)/SIN(K1))
  298. 3250 AZ=PI05-FNASN((SIN.SAT.LAT-SIN.STATE.LAT*COS(K1))/COS.STATE.LAT/SIN(K1))
  299. 3260 IF SIN(SAT.LON-STATE.LON)>=0 THEN AZ=PI2-AZ
  300. 3270 EL=INT(CSNG(PI081*EL+.5))
  301. 3280 AZ=INT(CSNG(PI081*AZ+.5))
  302. 3290 LOCATE YCOORD,70  : PRINT AZ;
  303. 3300 LOCATE YCOORD,75  : PRINT EL;
  304. 3310 NEXT YCOORD
  305. 3320 RESTORE 3366
  306. 3330 LOCATE 1,22 
  307. 3340 ' 
  308. 3350 ' 
  309. 3360 GOTO 4000
  310. 3365 ' 
  311.  '           *** DATA FOR DX STATE INFORMATION BOARD  ***
  312.  '          ==============================================
  313. '     STATE          LAT        LON
  314. 3366 DATA "NEW YORK",       40.75,     74
  315. DATA "SAN FRANCISCO",  37.58,     122.5
  316. DATA "RIO DE JANEIRO", -23,       43.2
  317. DATA "SANTIAGO DE CHILE",-33,     81
  318. DATA "TAHITI",         -18,       148
  319. DATA "FALKLAND IS.",   -52,       60
  320. DATA "CAPE TOWN",      -33.92,    341.63
  321. DATA "SINGAPORE",      1.3,       256.15
  322. DATA "HONG KONG",      22.2,      245.75
  323. DATA "TOKIO",          35.75,     220.25
  324. DATA "DARWIN",         -12.33,    229.1
  325. DATA "PERTH",          -31.95,    244.13
  326. DATA "SYDNEY",         -33.88,    208.83
  327. DATA "WELLINGTON",     -41.317,   185.23
  328. DATA "HAWAII",         21.313,    157.87
  329. DATA "VANCOUVER",      49,        137
  330. DATA "FAIRBANKS",      65,        147.66
  331. '  END OF DATA
  332.  
  333. 3370 '              ****   STORE DATA ON DISK  ***
  334. 3380 '              ==============================
  335. 3390 IF DAYS=OLDDAY THEN 3450
  336. 3400 PRINT : CALL TEXTSIZE (12)
  337. 3410 PRINT TAB(8);"ORBITS from  ";NA$;"  for  ";DATUM$
  338. 3420 PRINT"         DIRECTION and DISTANCE      SUB.-POSITION"
  339. 3430 PRINT"ORBIT #    TIME      AZ   EL  [km]    LON   LAT    MA"
  340. 3440 PRINT"------------------------------------------------------"
  341. 3445 CALL TEXTSIZE (9)
  342. 3450 PRINT NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
  343. 3460 IF DAYS<1 THEN CLOSE#1: GOTO 100
  344. 3470 IF UH<UHEND THEN GOTO 3500
  345. 3480 IF UM<UMEND THEN GOTO 3500
  346. 3490 IF DAYS <2 THEN CLOSE#1 : GOTO 100
  347. 3500 IF DAYS=OLDDAY THEN 3570
  348. 3510 PRINT#1,
  349. 3520 PRINT#1,TAB(10);"ORBITS from   ";NA$;"    for   ";DATUM$
  350. 3530 PRINT#1,"              DIRECTION and DISTANCE   SUB.-POSITION"
  351. 3540 PRINT#1,"ORBIT#   TIME      AZ   EL  [km]    LON    LAT   MA"
  352. 3550 PRINT#1,"------------------------------------------------------"
  353. 3560 OLDDAY=DAYS
  354. 3570 IF EL<=-2 THEN 3590
  355. 3580 PRINT#1,NR+EPOCH.REV;TAB(9);LEFT$(U$,5);" UTC";TAB(19);AZ;TAB(24);EL;TAB(28);DX;TAB(36);LON;TAB(42);LAT;TAB(48);MA
  356. 3590 GOTO 4000
  357.  
  358. 3600 '              *** AZ-EL PLOT  ***
  359. 3605 '              ====================
  360. 3610 GOSUB PlotSat
  361. 3660 LOCATE 1,7 :PRINT NA$
  362. 3665 LOCATE 1,16 :PRINT"on";
  363. 3669 LOCATE 1,19 : PRINT DATUM$;
  364. 3670 LOCATE 2,14  : PRINT NR+EPOCH.REV;
  365. 3680 LOCATE 25,12  : PRINT U$;
  366. 3690 PRINT TAB (31) AZ;
  367. 3700 PRINT TAB (48) EL;
  368. 3710 PRINT TAB (61) DX;
  369. 3720 '
  370. 4000 '              ***  INCREMENT TIME  ***
  371. 4010 '              ========================
  372. 4020 IF Key%<>1 THEN 4060
  373. 4022 ON TIMER (8) GOSUB Increment
  374. 4026 TIMER ON
  375. 4030 IdleLoop:
  376. GOTO IdleLoop
  377. 4035 '  TIMER OFF
  378. 4040 IF US>59 THEN UM=UM+1 : US=US-60
  379. 4050 GOTO 4070
  380. 4060 US=0 : UM=UM+I%
  381. 4070 IF UM>59 THEN UM= UM-60: UH=UH+1
  382. 4080 IF UH>23 THEN UH=0 : GOSUB 6000 : '  KALENDER
  383. 4090 IF UM>59 THEN GOTO 4070
  384. 4100 GOTO 1790
  385. 4110 '
  386. 5000 '              ***  UTC-STRING/TIME  ***
  387. 5010 '             ==========================
  388. 5020 K1=100+UH : K2 = 100+UM : K3 = 100 + US
  389. 5030 U$=RIGHT$(STR$(K1),2)+":"+RIGHT$(STR$(K2),2)+":"+RIGHT$(STR$(K3),2)
  390. 5040 Z=(UH+UM/60 + US/3600)/24
  391. 5050 RETURN
  392. 5060 ' 
  393. 6000 '             ***  JULIAN DATE  ***
  394. 6010 '              =====================
  395. 6020 DAYS=DAYS-1
  396. 6030 K1=TX : K2=MX : K3 = X : TX = 1 : MX =1 : JX = JX+1 : GOSUB 6540
  397. 6040 IF X = K3+1 THEN 6080
  398. 6050 MX=K2+1 : JX =JX-1 : GOSUB 6540
  399. 6060 IF X = K3+1 THEN 6080
  400. 6070 TX = K1+1 : MX=K2 : GOSUB 6540
  401. 6080 DATUM$=STR$(TX)+"."+RIGHT$(STR$(MX),LEN(STR$(MX))-1)+"."+RIGHT$(STR$(JX),4)
  402. 6090 DATUM$=RIGHT$(DATUM$,LEN(DATUM$)-1)
  403. 6100 GOSUB 8000
  404. 6110 RETURN
  405. 6120 ' 
  406. 6500 K1=VAL(DATUM$)
  407. 6510 TX=INT(CSNG(K1))
  408. 6520 MX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX))))))
  409. 6530 JX=INT(CSNG(VAL(RIGHT$(DATUM$,LEN(DATUM$)-LEN(STR$(TX)+STR$(MX))))))
  410. 6540 MY=MX+1 : JY=JX
  411. 6550 IF MX < 3 THEN MY=MY+12 : JY = JY-1
  412. 6560 X=INT(CSNG(365.25*JY))+INT(CSNG(30.6*MY))+TX-694024!-INT(CSNG(.75*INT(CSNG(JY/100+1))))
  413. 6570 RETURN
  414. 6580 '
  415. 8000 '               ***  LONG-TIME CORRECTION  ***
  416. 8010 '               ===============================
  417. 8020 DT=X-T0-EPOCH.TIME
  418. 8030 ME=MEAN.MOTION+DECAY.RATE*DT
  419. 8040 TU = 2880/(MEAN.MOTION+ME+DB/PI)
  420. 8050 K1=TU/84.491
  421. 8060 K2=K1^(7/3)*(1-ECCENTRICITY*ECCENTRICITY)^2
  422. 8070 K3=DB
  423. 8080 DB=.0869452/K2*(5*COS.INCLINATION*COS.INCLINATION-1)
  424. 8090 IF ABS(K3-DB)>.0000001 THEN 8040
  425. 8100 PB= -.17389046#/K2*COS.INCLINATION
  426. 8110 A = RE*K1^(2/3)
  427. 8120 RETURN
  428. 8130 '
  429. 9000 '              *** CURSOR ADRESSING  ***
  430. 9010 '              ==========================
  431. 9020 LOCATE YCOORD,XCOORD : '  VTAB(FIX(ycoord)) HTAB(FIX(xcoord))
  432. 9030 RETURN
  433. 9040 ' 
  434. 10205 '
  435. 12000 '             *** ERROR TRAPPING ROUTINE ***
  436. 12010 '              ===============================
  437. 12020 IF ERR=53 OR ERR=64 THEN RESUME 810
  438. 12030 item% = 0
  439.      STR1$ = "Error #" + STR$(ERR)
  440.      STR2$ = " in Line " + STR$(ERL)
  441.      STR3$ = "                "
  442.      STR4$ = "Resume Program..."
  443. 12040 Alert ref%,3,308,item%,STR1$,STR2$,STR3$,STR4$
  444. 12050 ' 
  445. 12060 RESUME 70
  446. 12070 END
  447.  
  448. 14900 '
  449. 14950 '              *** Utility for printing parameters ***
  450. 14999 '              =====================================
  451. 15000 CLS : PRINT:PRINT:PRINT TAB(10) NA$
  452. 15100 PRINT : PRINT :
  453. 15150 PRINT TAB (10) "Epoch.Time                   = ";EPOCH.TIME
  454. 15200 PRINT TAB (10) "Reference Date             = ";DATUM$
  455. 15300 PRINT TAB (10) "Inclination                    = ";INCLINATION
  456. 15400 PRINT TAB (10) "RA of Node                    = ";RA.OF.NODE
  457. 15500 PRINT TAB (10) "Excentricity                  = ";EXCENTRICITY
  458. 15600 PRINT TAB (10) "Arg. of Perigee             = ";ARG.OF.PERIGEE
  459. 15700 PRINT TAB (10) "Mean Anomaly               = ";MEAN.ANOMALY
  460. 15800 PRINT TAB (10) "Mean Motion                  = ";MEAN.MOTION
  461. 15900 PRINT TAB (10) "Decay Rate                    = ";DECAY.RATE
  462. 16000 PRINT TAB (10) "Epoch Revolution           = ";EPOCH.REV
  463. 16001 END
  464. 16900 '
  465. 16950 '              *** Utility for changing filetype ***
  466. 16999 '              ==================================
  467. 17000 CLS 
  468. 17010 file$ = FILES$(1)
  469. 17020 INPUT "ENTER NEW FILETYPE:  ", passwd$
  470. 17030 NAME file$ AS file$,passwd$
  471. 17040 PRINT "ok"
  472. 17050 END
  473.  
  474. '          ********        S U B R O U T I N E S         *********
  475. MenuInit:
  476. 20000 ' 
  477. 20010 TEXTMODE (0)
  478. 20020 ' MENU 2,0,0,""
  479. 20030 MENU 3,0,0,""
  480. 20032 MENU 4,0,0,""
  481. 20033 MENU 5,0,0,""
  482. 20035 '  Turn OFF normal Menus
  483. 20100 MENU 4,0,1,"Mode"
  484. 20110 MENU 4,1,1,"Realtime Tracking"
  485. 20120 MENU 4,2,1,"Step Tracking"
  486. 20130 MENU 4,3,1,"Data to Disk"
  487. 20140 MENU 4,4,1,"AZ/EL Projection"
  488. 20150 MENU 4,5,1,"New Parameters"
  489. 20152 MENU 4,6,1,"-----------------"
  490. 20155 MENU 4,7,1,"Exit to Desktop"
  491. '  $IGNORE ON
  492. 20160 MENU 4,8,1,"Exit to Basic"
  493. '  $IGNORE OFF
  494. 20170 MENU 4,6,0
  495. CmdKey 4,1,"R"
  496. CmdKey 4,2,"S"
  497. CmdKey 4,3,"D"
  498. CmdKey 4,4,"A"
  499. CmdKey 4,5,"N"
  500. CmdKey 4,7,"Q"
  501. true = -1
  502. 20190 RETURN
  503.  
  504. HandleMenu:
  505.             Key% = MENU(1)
  506.             MENU 4,0,0 : '  disable menu
  507.             GOTO 568
  508.          RETURN
  509.  Scale:
  510.          TEXTMODE (1)
  511.          YCOORD = 23 -23/60*20
  512.          LOCATE YCOORD, 1
  513.          PRINT "-  [20]";
  514.          YCOORD = 23 -23/60*40
  515.          LOCATE YCOORD, 1
  516.          PRINT "-  [40]";
  517.          XCOORD = 77/360 * 90 +2
  518.          GOSUB Bar
  519.          XCOORD = 77/360 * 180+ 2
  520.          GOSUB Bar
  521.          XCOORD = 77/360 * 270+2 
  522.          GOSUB Bar
  523.          XCOORD = 77+2
  524.          GOSUB Bar
  525.          TEXTMODE (0)
  526.      RETURN
  527.  Bar:
  528.          LOCATE 23, XCOORD
  529.          PRINT "|";
  530.      RETURN      
  531.      
  532. 35000 EnterDate:
  533.         DAY$ = DATE$
  534.         YEAR$ = RIGHT$(DAY$,2)
  535.         MON$ = LEFT$(DAY$,2)
  536.         IF LEFT$(MON$,1) = "0" THEN MON$ = RIGHT$(MON$,1)
  537.         DAY$ = MID$(DAY$,4,2)
  538.         IF LEFT$(DAY$,1) = "0" THEN DAY$ = RIGHT$(DAY$,1)
  539.         DATUM$ = DAY$+"."+MON$+"."+YEAR$
  540.         WINDOW 2, "Current date",(270,75) - (490,125),1
  541.         PRINT "  Enter current Date (dd.mm.yy): "
  542.         CALL TEXTFACE (1)
  543.         EDIT FIELD 1, DATUM$,(15,25) - (83,40)
  544.         WHILE DIALOG (0) = 1 : WEND
  545.         BUTTON 1,2, "OK",(105,20) - (135,45)
  546.         WHILE DIALOG (0) <> 1 : WEND
  547.         DATUM$ = EDIT$ (1)
  548.         ButtonPushed = DIALOG(1)
  549.         WINDOW CLOSE 2
  550.         CALL TEXTFACE (0)
  551.        RETURN
  552.  
  553. 36000 EnterTime:
  554.         U$ = TIME$
  555.         HH$ = LEFT$(U$,2)
  556.         MM$ = MID$(U$,4,2)
  557.         U$ = HH$+MM$
  558.         WINDOW 3, "Time",(300,75) - (480,125),1
  559.         PRINT "Enter Time (UTC) (hhmm): "
  560.         CALL TEXTFACE (1)
  561.         EDIT FIELD 1, U$,(15,25) - (60,40)
  562.         WHILE DIALOG (0) = 1 : WEND
  563.         BUTTON 1,2, "OK",(105,20) - (135,45)
  564.         WHILE DIALOG (0) <> 1 : WEND
  565.         U$ = EDIT$ (1)
  566.         ButtonPushed = DIALOG(1)
  567.         WINDOW CLOSE 3
  568.         CALL TEXTFACE (0)
  569.        RETURN
  570. 37000 EnterSteprate:
  571.         WINDOW 4, "Steprate ",(300,75) - (470,125),1
  572.         PRINT "  Enter Steprate (min): "
  573.         CALL TEXTFACE (1)
  574.         EDIT FIELD 1, "60",(15,25) - (48,40)
  575.         WHILE DIALOG (0) = 1 : WEND
  576.         BUTTON 1,2, "OK",(105,20) - (135,45)
  577.         WHILE DIALOG (0) <> 1 : WEND
  578.         I% = VAL(EDIT$ (1))
  579.         ButtonPushed = DIALOG(1)
  580.         WINDOW CLOSE 4
  581.         CALL TEXTFACE (0)
  582.        RETURN
  583. 38000 TimeOfEnd:
  584.         WINDOW 3, "Time  of End",(300,75) - (480,125),1
  585.         PRINT "Enter Time (UTC) (hhmm): "
  586.         CALL TEXTFACE (1)
  587.         EDIT FIELD 1, "2359",(15,25) - (60,40)
  588.         WHILE DIALOG (0) = 1 : WEND
  589.         BUTTON 1,2, "OK",(105,20) - (135,45)
  590.         WHILE DIALOG (0) <> 1 : WEND
  591.         UTCEND$ = EDIT$ (1)
  592.         ButtonPushed = DIALOG(1)
  593.         WINDOW CLOSE 3
  594.         CALL TEXTFACE (0)
  595.        RETURN
  596. 39000 NbrOfDays:
  597.         WINDOW 2, "Number of Days",(300,75) - (480,125),1
  598.         PRINT "Number of Days: "
  599.         CALL TEXTFACE (1)
  600.         EDIT FIELD 1, "5",(15,25) - (40,40)
  601.         WHILE DIALOG (0) = 1 : WEND
  602.         BUTTON 1,2, "OK",(105,20) - (135,45)
  603.         WHILE DIALOG (0) <> 1 : WEND
  604.         DAYS = VAL(EDIT$ (1))
  605.         ButtonPushed = DIALOG(1)
  606.         WINDOW CLOSE 2
  607.         CALL TEXTFACE (0)
  608.        RETURN
  609. 40000 NewLocation:
  610.         CALL TEXTFACE (1)
  611.         WINDOW 4, "Station Location",(270,75) - (480,125),1
  612.         PRINT "Do you wish a new Location? "
  613.         CALL TEXTFACE (1)
  614.         WHILE DIALOG (0) = 1 : WEND
  615.         BUTTON 1,1, "Yes",(55,20) - (85,45),1
  616.         BUTTON 2,2, "No", (105,20) - (135,45),1
  617.         WHILE DIALOG (0) <> 1 : WEND
  618.         ButtonPushed = DIALOG(1)
  619.         IF ButtonPushed = 1 THEN Key$ = "Y" ELSE Key$ = "N"
  620.         WINDOW CLOSE 4
  621.         CALL TEXTFACE (0)
  622.        RETURN
  623.        
  624. 41000 PlotSat:
  625.         IF CoordY > 273 THEN RETURN
  626.         PSET(CoordX,CoordY),33
  627.        RETURN
  628. 42000 Increment: ' increments time
  629.           US=US+10
  630.           GOTO 4040 
  631.       RETURN
  632.          
  633.          
  634. Kepler:
  635. 50000 '
  636. 50010 '  Sat Nov 28, 1987 07:31:23
  637. 50020 GOTO 50090
  638. '                 ******************************
  639. '                 ** Programm zur Eingabe der **
  640. '                 **      KEPLER Elemente     **
  641. '                 **         19.7.87          **
  642. '                 ******************************
  643. 50080 '
  644. 50090 CLS : ' DEFDBL A-Z
  645. 50100 PRINT "                 Satellite Parameters "
  646. 50105 PRINT "Use decimal point <.> and include leading zeroes."
  647. 50110 PRINT: INPUT "Name of Satellite : ", NA$
  648. 50120 INPUT "Reference Date  (dd.mm.yy): ", DATUM$
  649. 50130 PRINT "Enter Epoch Time"
  650. 50140 INPUT "                                    hours     : "; HOURS
  651. 50150 INPUT "                                    minutes : "; MINUTES
  652. 50160 INPUT "                                    seconds  : "; SECONDS
  653. 50170 EPOCH.TIME =(HOURS+MINUTES/60 + SECONDS/3600)/24
  654. 50180 PRINT :  PRINT TAB(12) "Epoch.Time           = "EPOCH.TIME
  655. 50190 IF EPOCH.TIME > 0 THEN GOTO 50220
  656. 50200 PRINT
  657. 50210 INPUT "Epoch.Time                  : ",EPOCH.TIME
  658. 50220 INPUT "Inclination (deg)         : ",INCLINATION
  659. 50230 INPUT "RA of Node (deg)          : ",RA.OF.NODE
  660. 50240 INPUT "Excentricity                : ",EXCENTRICITY
  661. 50250 INPUT "Arg of Perigee (deg)    : ",ARG.OF.PERIGEE
  662. 50260 INPUT "Mean Anomaly (deg)     : ",MEAN.ANOMALY
  663. 50270 INPUT "Mean Motion (rev/day) : ",MEAN.MOTION
  664. 50280 INPUT"Decay Rate (rev/day^2) : ",DECAY.RATE
  665. 50290 INPUT "Epoch Rev.                   : ",EPOCH.REV
  666. 50500 CLS : PRINT:PRINT:PRINT TAB(10) NA$
  667. 50510 PRINT : PRINT :
  668. 50515 PRINT TAB (10) "Epoch.Time                   = ";EPOCH.TIME
  669. 50520 PRINT TAB (10) "Reference Date             = ";DATUM$
  670. 50530 PRINT TAB (10) "Inclination                    = ";INCLINATION
  671. 50540 PRINT TAB (10) "RA of Node                    = ";RA.OF.NODE
  672. 50550 PRINT TAB (10) "Excentricity                  = ";EXCENTRICITY
  673. 50560 PRINT TAB (10) "Arg. of Perigee             = ";ARG.OF.PERIGEE
  674. 50570 PRINT TAB (10) "Mean Anomaly               = ";MEAN.ANOMALY
  675. 50580 PRINT TAB (10) "Mean Motion                  = ";MEAN.MOTION
  676. 50590 PRINT TAB (10) "Decay Rate                    = ";DECAY.RATE
  677. 50600 PRINT TAB (10) "Epoch Revolution           = ";EPOCH.REV
  678. 50610 PRINT : PRINT TAB (10) : INPUT  "Is this correct?   (Y/N)   ",Key$
  679. 50620 IF Key$ = "Y" OR Key$ = "y" THEN GOTO 50700
  680. 50630 IF Key$ = "N" OR Key$ = "n" THEN GOTO 50090
  681. 50640 GOTO 50610
  682. 50700 NB$ = NA$+".PAR"
  683. 51000 OPEN "O",#1,NB$
  684. 51010 WRITE#1,NA$,DATUM$,EPOCH.TIME;EPOCH.REV;INCLINATION;RA.OF.NODE;EXCENTRICITY;ARG.OF.PERIGEE;MEAN.ANOMALY;MEAN.MOTION;DECAY.RATE
  685. 51020 CLOSE#1
  686. 51030 NAME NB$ AS NB$,"PARA"
  687.